#ifndef BICLEF_HPP
#define BICLEF_HPP

// Créé avec XmlCppClassGenerator version 2.0 beta.

/** Classe utilitaire qui pemet d'utiliser deux nombres entiers comme clé d'un
 * conteneur.
 *
 * Il s'agit d'une classe toute simple, contenant deux nombres entiers, avec
 * définitions des opérateurs de comparaisons nécessaires. Les deux entiers
 * sont appelés clé primaire et secondaire respectivement, l'ordre de ces deux
 * clés est important pour le tri.
 *
 * @author Johan "Solo" Luisier
 * @date Mai 2012
 */
class BiClef
{
public:
  /** Constructeur
   *
   * Sert de constructeur par défaut, et permet de promouvoir un entier en une
   * instance de BiClef.
   *
   * @param[in] primaire valeur de la clé primaire.
   * @param[in] secondaire valeur de la clé secondaire.
   */
  BiClef( const unsigned& primaire = 0, const unsigned& secondaire = 0 );
  /** Constructeur de copie
   *
   * Permet de dupliquer une instance de BiClef.
   *
   * @param[in] biClef instance à copier.
   */
  BiClef( const BiClef& biClef );
  /** Destructeur
   *
   * Le destructeur n'a rien de spécial à faire.
   */
  virtual ~BiClef();
  /** Opérateur de comparaison "est plus petit que".
   *
   * Permet de comparer deux instance de Biclef.
   *
   * L'instance la plus petite est celle qui a la clé primaire la plus petite
   * ou en cas d'égalité, la clé secondaire la plus petite.
   *
   * @param[in] autre instance de BiClef à comparer avec l'instance courante.
   *
   * @retval true si l'instance courante est plus petite que @e autre, @reval
   * false sinon.
   */
  bool operator<( const BiClef& autre ) const;
  /** Opérateur de comparaison "est plus grand que".
   *
   * Permet de comparer deux instance de Biclef.
   *
   * L'instance la plus grande est celle qui a la clé primaire la plus grande
   * ou en cas d'égalité, la clé secondaire la plus grande.
   *
   * @param[in] autre instance de BiClef à comparer avec l'instance courante.
   *
   * @retval true si l'instance courante est plus grande que @e autre, @reval
   * false sinon.
   */
  bool operator>( const BiClef& autre ) const;
  /** Permet d'accéder à Primaire.
    *
    * @return une référence constante sur Primaire.
    */
  const unsigned& primaire() const;
  /** Permet de changer la valeur de Primaire.
    *
    * @param primaire nouvelle valeur de Primaire.
    */
  void setPrimaire( const unsigned& primaire );
  /** Permet d'accéder à Secondaire.
    *
    * @return une référence constante sur Secondaire.
    */
  const unsigned& secondaire() const;
  /** Permet de changer la valeur de Secondaire.
    *
    * @param secondaire nouvelle valeur de Secondaire.
    */
  void setSecondaire( const unsigned& secondaire );
  /** Opérateur d'affectation.
   *
   * Permet de copier une autre instance dans l'instance courante.
   *
   * @param[in] biClef instance à copier.
   *
   * @return une référence sur l'instance courante.
   */
  BiClef& operator=( const BiClef& biClef );
  /** Opérateur de comparaison "est égal à".
   *
   * Les deux instances sont égale si et seulement si les clés primaire et
   * secondaires sont égales.
   *
   * @param[in] biClef instance de BiClef à comparer à l'instance courante.
   *
   * @retval true si les deux instances sont égales, @retval false sinon.
   */
  bool operator==( const BiClef& biClef ) const;
  protected:
  /** Clé primaire.
   *
   * Clé principale, qui est dominante dans le test de comparaison.
   */
  unsigned Primaire;
  /** Clé secondaire.
   *
   * Clé subsidiaire, sert à départager les éléments dont les clés primaires
   * sont égales dans le tri.
   */
  unsigned Secondaire;
};


#endif // BICLEF_HPP
